package com.xiaoshuidi.cloud.module.contract.dal.dataobject.contract;

import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.xiaoshuidi.cloud.framework.mybatis.core.dataobject.BaseDO;
import com.xiaoshuidi.cloud.framework.mybatis.core.dataobject.DeptFilter;
import com.xiaoshuidi.cloud.framework.tenant.core.db.TenantBaseDO;
import com.xiaoshuidi.cloud.module.contract.enums.settlement.SettlementStatusEnum;
import lombok.*;

import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 合同结算 DO
 *
 * @author 合房租赁
 */
@TableName(value = "contract_settlement", autoResultMap = true)
@KeySequence("contract_settlement_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SettlementDO extends TenantBaseDO implements DeptFilter {

    /**
     * 结算单id
     */
    @TableId
    private Long id;
    /**
     * 父合同结算单id
     */
    private Long parentSettlementId;

    /**
     * 合同id
     */
    private Long contractId;
    /**
     * 合同编号
     */
    private String contractNo;
    /**
     * 账单表id
     */
    private Long orderId;
    /**
     * 结算单编号
     */
    private String settlementNo;
    /**
     * 结算单类型 default普通结算单 | owner_settlement业主结算单 | company_settlement 企业合同结算单
     */
    private String settlementType;
    /**
     * 公寓id
     */
    private Long apartmentId;
    /**
     * 公寓名称
     */
    private String apartmentName;
    /**
     * 房间id
     */
    private Long roomId;
    /**
     * 房间名称
     */
    private String roomName;
    /**
     * 房间完整名称
     */
    private String roomFullName;
    /**
     * 房屋地址
     */
    private String apartmentAddr;
    /**
     * 管家
     */
    private String apartmentHousekeeper;
    /**
    * 租客姓名
    * */
    private String customerName;

    /**
    * 租客手机号
    * */
    private String customerPhone;

    /**
     * 退租单状态  (清算)  状态 0 待审批 | 1 审批通过 | 2 已驳回  | 3 待清算 | 4 已清算
     * {@link SettlementStatusEnum}
     */
    private String clearedStatus;
    /**
    * 退租类型
    * */
    private String evictionType;

    /**
     * 退租时间
     * */
    private LocalDate evictionTime;

    /**
    * 退租原因
    * */
    private String evictionReason;

    /**
    * 资金流向 out 流出| in 流入
    * */
    private String flowType;

    /**
     * 应收款费用
     * */
    private BigDecimal receivablesAmount;

    /**
     * 应退款费用
     * */
    private BigDecimal refundableAmount;

    /**
    * 金额
    * */
    private BigDecimal amount;

    /**
    * 持卡人
    * */
    private String cardholder;

    /**
     * 支行省
     */
    private String   bankProvince;
    /**
     * 支行市
     */
    private String bankCity;
    /**
    * 支行code
    * */
    private String bankCode;

    /**
    * 银行卡号
    * */
    private String customerCreditCard;
    /**
    * 退租房间资产
    * */
    private String roomAsset;

    /**
    * 所属银行
    * */
    private String customerBank;

    /**
    * 所属支行
    * */
    private String customerBankArea;

    /**
    * 附件信息
    * */
    private String certificateUrl;

    /**
    * 备注
    * */
    private String remark;

    /**
     * 收款开始时间
     * */
    private LocalDate startReceivables;

    /**
     * 收款结束时间
     * */
    private LocalDate endReceivables;
    /**
     * 流水号
     * */
    private String flowNumber;
    /**
     * 支付方式
     * */
    private String payManner;

    private String processInstanceId;
    /**
     * 实际支付时间
     */
    private LocalDate actualPaymentTime;
    @TableField(fill = FieldFill.INSERT)
    private Long deptId;

    @Override
    public void setDeptId(Long deptId) {
        this.deptId = deptId;
    }
    private String operator;

}
